/**
 * @author hzx
 * @class IndexPage
 * @extends Ext.Viewport
 * @description 主页布局
 */
IndexPage = Ext.extend(Ext.Viewport, {
	cun : null,
	tabNum : 1,
	userName : "",
	userId : "",
	userTypeStr : "",
	/**
	 * 中间区域
	 */
	center : new Ext.TabPanel({
				id : "MainTab",
				region : "center",
				activeTab : 0,
				autoScroll : true, // 自动添加滚动条
				height : 80,
				split : true, // 添加分割线
				floating: false,
				plugins : new Ext.ux.TabCloseMenu()
//				items : {
//					closeable : true,
//					iconCls : "houfei-homeTabIcon", // tab页图片样式
//					title : "首页",
//					url : "hrmfactory/countreport/countReportPersonfile.jsp"
//				}
			}),
	/**
	 * 构造方法
	 */
	constructor : function() {
		//this.cun = '${sessionScope.userInfo.userName}';
		this.userName = Ext.get("userName").getValue();
		this.userTypeStr = Ext.get("userTypeStr").getValue();
		this.userId = Ext.get("userId").getValue();
//		alert(this.userName);
		/**
		 * 将父类的构造拷贝过来
		 */
		IndexPage.superclass.constructor.call(this, {
			layout : "border", // 指定布局为border布局
			items : [{
						region : "north", // 北部布局
						xtype : "panel", // 指定容器为panel
						border : false, // 不要边框
						height : 80, // 高度
						baseCls:"x-plain"
					}, {
						region : "west",
						xtype : "panel",
						layout : "accordion", // 手风琴布局
						title : "短信平台",
						split : true, // 添加分割线
						collapsible : true, // 自动伸缩
						width : 200, // 宽度
						layoutConfig : {
							// 展开折叠是否有动画效果
							animate : true
						},
						// 事件监听
						listeners : {
							'expand' : {
								fn : this.onExpandPanel,
								scope : this
							},
							'collapse' : {
								fn : this.onCollapsePanel,
								scope : this
							}
						},
						items : [{
							title : "控制面板", // 标题
							iconCls:"houfei-checkIcon",
							xtype : "treepanel", // 指定类型为树面板
							autoScroll : true, // 自动添加滚动条
							border : false, // 不要边框
							id : "mytree",
							tools : [{
										id : 'refresh', // 刷新按钮
										handler : this.onRefreshTreeNodes,
										scope : this,
										tooltip : "刷新菜单"
									},{
										id : 'closeOtherTab', // 刷新按钮
										handler : this.onlogout,
										scope : this,
										tooltip : "退出系统"
									}],
							// 树的加载器
							loader : new Ext.tree.TreeLoader({
										// tree数据的远程服务器地址,相当于proxy,每次请求会将node的id值传递给服务器
										dataUrl : "treeNode.do?operator=showNode"
									}),
							// 根节点
							root : new Ext.tree.AsyncTreeNode({
										text : "短信平台",
										iconCls : "houfei-treeRootIcon",
										id : "1"
									}),
							// 监听事件
							listeners : {
								"click" : {
									fn : this.onTreeNodeClick,
									scope : this
								}
							}
						}
						, {
							title : "退出系统",
							iconCls:"houfei-userManagerIcon",
							// 监听事件
							listeners : {
								"expand" : {
									fn : this.onlogout,
									scope : this
								}
							}
						}
						]
					}, this.center, {
						region : "south", // 南方布局
						split : true, // 添加分割线
						xtype : "panel", // 用panel作为容器
						border : false, // 不要边框
						frame : true, // 强制背景色
						height : 27,// 高度
						html : "<div align='center'><font color=\"#15428b\">登录ID: "+this.userId+" | 当前用户: "+this.userName+" | 用户类型: "+this.userTypeStr+" | 技术支持：huangzhuxing@gmail.com</font></div>"
					}]
		})
		this.onRefreshTreeNodes();
		var newTab2 = this.center.add(new Ext.Panel({
			id : "user_report_home", // tab的唯一id
			title : "用户首页", // tab的标题
			closeable : true,
			iconCls : "houfei-homeTabIcon", // tab页图片样式
			floating : false,
			listeners : {
				// 侦听tab页被激活里触发的动作
//				activate : function(){
//					//alert(tabLink);
//					newTab2.load({
//						url : "smsfactory/user/userHomePage.jsp", // 请求服务器的地址
//						method : "post", // post请求方式
//						params : {
//							// 这里是关键的一个参数，传给load页，布局的关键
//							//subMainId : subMainId
//						},
//						scope : this, // 范围
//						discardUrl : true, // 丢弃url
//						nocache : true, // 不缓存
//						text : "加载中,请稍候……",
//						timeout : 0, // 延时3秒
//						scripts : true
//							// 允许执行script
//						});
//				},
//				close : this.onCloseTabSize,
//				scope : this
			}
		}));
		this.center.setActiveTab(newTab2);
		newTab2.load({
			url : "smsfactory/user/userHomePage.jsp", // 请求服务器的地址
			method : "post", // post请求方式
			params : {
				// 这里是关键的一个参数，传给load页，布局的关键
				//subMainId : subMainId
			},
			scope : this, // 范围
			discardUrl : true, // 丢弃url
			nocache : true, // 不缓存
			text : "加载中,请稍候……",
			timeout : 0, // 延时3秒
			floating : false,
			scripts : true
			
				// 允许执行script
			});
	},

	/**
	 * 动态添加标签页
	 * 
	 * @param {}
	 *            _name 节点的text值
	 * @param {}
	 *            _id 节点id
	 * @param {}
	 *            _css css
	 * @param {}
	 *            _link 节点的链接
	 */
	addTab : function(_name, _id, _css, _link) {
		// 动态创建tab标签的id
		var tabId = "tab_" + _id;
		// 动态创建tab标签的标题
		var tabTitle = _name;
		// 动态获取tree的某个节点的链接
		var tabLink = _link;
		// 获取主tab组件
		var centerPanel = Ext.getCmp("MainTab");
		// 根据id获取centerPanel组件的直接子组件的引用
		var tab = centerPanel.getComponent(tabId);
		// 这个要传到load页去，很关键，以后的布局要靠它
		var subMainId = 'tab_' + _id + '_main';
		/**
		 * 如果可以获取到tab页,就不用再次添加tab页了 (获取不到时tab=undefined)
		 * (也就是说如果当前tab页已经渲染就不用再次添加该tab了)
		 */
		if(!tab&&this.tabNum > 8){
			Ext.Msg.alert("系统提示","你当前打开的窗口过多，请关闭某些窗口后再次打开!");
			return;
		}
		if (!tab) {
			this.tabNum++;
			// 动态创建tab
			var newTab = centerPanel.add(new Ext.Panel({
						id : tabId, // tab的唯一id
						title : tabTitle, // tab的标题
						iconCls : "houfei-treeNodeLeafIcon", // 图片
						layout : 'fit', // 填充布局,它不会让load进来的东西改变大小
						border : false, // 无边框
						closable : true, // 有关闭选项卡按钮
						titleCollapse : true,
						listeners : {
							// 侦听tab页被激活里触发的动作
							activate : function(){
								this.onActiveTabSize();
								//alert(tabLink);
//								newTab.load({
//									url : tabLink, // 请求服务器的地址
//									method : "post", // post请求方式
//									params : {
//										// 这里是关键的一个参数，传给load页，布局的关键
//										subMainId : subMainId
//									},
//									scope : this, // 范围
//									discardUrl : true, // 丢弃url
//									nocache : true, // 不缓存
//									text : "加载中,请稍候……",
//									timeout : 0, // 延时3秒
//									scripts : true
//										// 允许执行script
//									});
							},
							//close : this.onCloseTabSize,
							destroy : this.onCloseTabSize,
							scope : this
							
						}
					}));

			// 激活加入的tab页(将新创建的tab页获取焦点)
			centerPanel.setActiveTab(newTab);

			newTab.load({
				url : tabLink, // 请求服务器的地址
				method : "post", // post请求方式
				params : {
					// 这里是关键的一个参数，传给load页，布局的关键
					subMainId : subMainId
				},
				scope : this, // 范围
				discardUrl : true, // 丢弃url
				nocache : true, // 不缓存
				text : "加载中,请稍候……",
				timeout : 0, // 延时3秒
				scripts : true
					// 允许执行script
				});
		} else {
			// 激活已存在的tab页
			centerPanel.setActiveTab(tab);
		}
	},
	onCloseTabSize : function() {
		--this.tabNum;
	},
	/**
	 * 激活TAB页时改变内部容器的大小
	 */
	onActiveTabSize : function() {
		// 获取当前活动的tab页的body元素的宽度 (不含任何框架元素)
		var w = Ext.getCmp('MainTab').getActiveTab().getInnerWidth();
		// 获取当前活动的tab页的body元素的高度 (不含任何框架元素)
		var h = Ext.getCmp('MainTab').getActiveTab().getInnerHeight();
		// 获取当活动的tab页的id
		var Atab = Ext.getCmp('MainTab').getActiveTab().id;

		// 获取组件
		var submain = Ext.getCmp(Atab + "_main");

		if (submain) {
			submain.setWidth(w);
			submain.setHeight(h);
		}
		
	},

	/**
	 * treePanel的刷新按钮事件
	 * 
	 * @param {}
	 *            _treePanel
	 */
	onRefreshTreeNodes : function() {
		Ext.getCmp("mytree").root.reload();

	},
	onlogout : function() {
		Ext.getCmp("user_report_home").hide();
//		Ext.Msg.show({
//		   title:'系统消息',
//		   msg: '您确定要退出系统吗?',
//		   buttons: Ext.Msg.YESNO,
//		   fn: this.onLogoutConfrimBtnClick,
//		   animEl: 'elId',
//		   icon: Ext.MessageBox.QUESTION
//		});
		
		Ext.Msg.confirm("系统消息", "您确定要退出系统吗?",this.onLogoutConfrimBtnClick, this); 	

	},
	onLogoutConfrimBtnClick : function(_btn) {
		if (_btn == "yes") {
			// 进行异步Ajax请求
			Ext.Ajax.request({
						url : "userInfoSms.do",
						method : "post",
						success : this.onLogoutuccess,
						failure : function(){Ext.Msg.alert("系统消息","系统繁忙!");window.location.href = "/sms/index.jsp";},
						scope : this,
						params : {
							operator : "logout"
						}
					});
		}else{
			Ext.getCmp("user_report_home").show();
		}
	},
	/**
	 * 添加成功事件
	 * 
	 * @param {}
	 *            _form
	 * @param {}
	 *            _response
	 */
	onLogoutuccess : function(_form, _action) {
		var respText = Ext.util.JSON.decode(_form.responseText); 
		Ext.Msg.alert("系统消息", "退出成功!");
		window.location.href = respText.succMsg;//"/sms/index.jsp"; 
	},
	/**
	 * 树的节点单击事件
	 * 
	 * @param {}
	 *            _node 节点
	 * @param {}
	 *            _e
	 */
	onTreeNodeClick : function(_node, _e) {
		// 如果当前节点为叶子节点
//		 alert(_node.isLeaf());
//		 alert(_e);
		if (_node.isLeaf()) {
			// 获取当前节点的值
			var _nodeText = _node.attributes.text;
			// 获取当前节点的连接
			var _nodeLink = _node.attributes.linkUrl;
			// 获取当前节点的id
			var _nodeId = _node.attributes.id;
			// 调用动态添加Tab页方法
			this.addTab(_nodeText, _nodeId, '_css', _nodeLink);

		}
	},

	/**
	 * 面板展开事件
	 * 
	 * @param {}
	 *            _nowCmp
	 */
	onExpandPanel : function(_nowCmp) {
		 //alert('展开之后触发');
		this.onActiveTabSize();
	},
	/**
	 * 面板闭合事件
	 * 
	 * @param {}
	 *            _nowCmp
	 */
	onCollapsePanel : function(_nowCmp) {
//		 alert('面板关闭后触发');
		this.onActiveTabSize();
	}

});